草庐IT

git pull --rebase

全部标签

git - 如何避免 git rebase 杀死 merge 提交?

给定以下git历史:C-Iorigin/master/A-B-F-G-Hmaster\/D-Ebranch-b我想将我的本地master分支rebase到origin/master之上,但我想保留merge提交G。当我尝试在master上简单地执行gitrebaseorigin/master时,它将D..E压缩为G并使用E的提交消息提交,因此merge的历史记录丢失了。有没有办法在仍然获得rebase的同时保留此merge?为清楚起见,我的预期结果是:A-B-C-I-F-G-Hmaster\/D-----Ebranch-b 最佳答案

git - 从 rebase 期间的无意跳过中恢复

我只是试图将一个非常古老的分支rebase,对我的主分支进行一些小的修改。只merge涉及的三个文件中的一个就出现了问题,所以我不假思索地做了一个--skip,以为它会跳过那个文件,但碰巧的是,它似乎跳过了我所有的更改,并向前滚动。所以现在rebase完成了,我的更改似乎已经消失了。我看到了关于undoingrebase的问题,但这对我来说都是希腊语,我看到了reflog,但我不知道在rebase之前分支附加到哪个提交。无论如何,我真的不需要撤销rebase,我只是希望能够恢复这两个文件的变化。无论如何都可以正确地做到这一点(如果做不到这一点,我只需要恢复昨天的存储库备份并手动挑选出来

git - 我如何 git rebase 第一次提交?

我使用gitinit创建了一个新的repo,然后进行了三次提交。现在我想rebase以返回并修改我的第一次提交,但是如果我执行gitrebase-iHEAD~3它会显示错误-fatal:invalidupstream'HEAD~3'!如果我对HEAD~2进行同样的尝试,那么它可以工作,但只能让我重新安排最后两次提交。如何引用“在有任何提交之前提交”或返回并插入一个空提交?gitrebase-iHEAD~3错误:fatal:invalidupstream'HEAD~3' 最佳答案 最简单的方法,使用足够新的Git(它已经发布很长时间了

git - 如何以非交互方式运行 git rebase --interactive?

是否可以执行以下操作?使gitrebase--interactive仅将标准样板文件输出到文件,而不是输出到文件并在编辑器中打开它。让用户编辑文件。让用户使用编辑后的文件名重新运行gitrebase。继续执行通常的rebase过程。用例:当然是脚本化rebase。参见howtore-ordercommitsinGitnon-interactively例如。 最佳答案 经过一些思考和研究,答案很简单:gitrebase-i从众所周知的EDITOR/VISUAL环境变量中获取编辑器名称,因此覆盖它以指向非交互式脚本即可完成工作。但是,E

git - git rebase 和 git merge --ff-only 之间有区别吗

从我读到的内容来看,它们都帮助我们获得了线性历史。根据我的实验,rebase一直有效。但是merge--ff-only只适用于可以快进的场景。我还注意到,gitmerge创建了一个merge提交,但是如果我们使用--ff-only,它会给出一个线性历史,基本上等于gitrebase。所以--ff-only扼杀了gitmerge的目的,对吧?那么它们之间的实际区别是什么? 最佳答案 请注意gitrebase与gitmerge的工作不同(有或没有--ff-only)。什么rebase所做的是获取现有的提交并复制它们。例如,假设您在bra

git - 如何从一开始就对所有提交进行 rebase

所以我要从svn(code.google.com)迁移到git(github)。我已经从svn存储库导入了我的项目,并且它一路导入了所有提交历史记录。我对这些评论并不感到自豪,因为这是我的第一个项目,不是很认真。我想将所有内容重新设置为单个“初始导入”提交。我已经把所有东西都pull到我的电脑上了,我正在努力做到这一点。但我发现的只是:gitrebase-imaster但它只会对新的修改和提交进行rebase。如何使用rebase从所有历史记录中清除我的github存储库? 最佳答案 gitrebase-i--root将从头开始对所

git - 为什么我必须一遍又一遍地解决相同的 "git rebase"冲突?

当我做gitrebasebranch1在我的branch1-local我有冲突。我解决了冲突,做gitadd然后做gitrebase--continue正如git要求我做的那样。之后应用新的提交。新的冲突出现了。但是在同一个文件中再次发生相同的冲突。我再做一次,gitadd,gitrebase--continue,然后这一切再次重复,直到我为每个重新提交的提交重复此操作。为什么rebase让我一遍又一遍地重做相同的冲突解决方案? 最佳答案 你想要的是gitrerere,它会为你记录冲突解决方案。我所见过的最好的介绍现在是GitBoo

git - 如何使用 tortoisegit 执行 rebase (squash)

无法了解如何为当前分支执行压缩rebase。控制台命令是gitrebase-iHEAD~2然后像往常一样压扁。但是如何在TGit中做同样的事情呢?初始化案例的脚本gitinit.touch1gitadd1gitcommit-m"1"touch2gitadd2gitcommit-m"2"touch3gitadd3gitcommit-m"3"压缩后的结果是1次提交包含3个文件。有什么建议吗? 最佳答案 这对我使用TortoiseGit1.7.12有效:右键单击要进行交互式rebase的工作目录,然后从上下文菜单中选择TortoiseGi

git rebase 基础知识

我最近开始使用gitrebase并且不是100%确定我做对了。为了题主的缘故,origin中有两个分支,master和从master分支出来的next。自上次两者同步以来,master有2次提交,next有6次:$gitlog--onelineorigin/next..origin/master59b5552mastercommit#2485a811mastercommit#1$gitlog--onelineorigin/master..origin/next4ebf401nextcommit#6e9b6586nextcommit#5197ada0nextcommit#44a2c3c6

Git rebase interactive drop vs 删除提交行

与Git交互式rebase中的drop和只删除提交行有什么区别? 最佳答案 默认没有区别;这只是表达同一件事的另一种方式。但是,如果您设置rebase.missingCommitsCheckwarn或error,然后删除一行将触发警告(对于检测困惑的剪切和粘贴很有用)。然后将行设置为drop明确告诉Git您想要删除该提交,并且不会显示任何警告。 关于Gitrebaseinteractivedropvs删除提交行,我们在StackOverflow上找到一个类似的问题: